Telegram Group & Telegram Channel
🐍 Хитрая задача на замыкания в Python

🔹 Уровень: Advanced
🔹 Темы: замыкания (closures), переменные цикла, lambda, отложенное выполнение

📌 Условие

Что выведет следующий код?


funcs = []

for i in range(5):
funcs.append(lambda: i)

results = [f() for f in funcs]
print(results)


Вопросы

1. Почему вывод может не соответствовать ожиданиям [0, 1, 2, 3, 4]?
2. Что именно "запоминает" lambda внутри цикла?
3. Как переписать код, чтобы результат был [0, 1, 2, 3, 4]?

🔍 Разбор

Ожидаемый (неправильный) вывод:

[4, 4, 4, 4, 4]


🔧 Почему так происходит

- Все lambda внутри funcs замыкают одну и ту же переменную `i`.
- К моменту выполнения f() переменная i уже равна 4 — и так для всех функций.

⚠️ Подвох

lambda: i не захватывает значение, а ссылается на переменную, которая будет изменяться при каждой итерации цикла.
В итоге — все lambda ссылаются на одно и то же `i`, которое стало равно 4 к концу цикла.

🧠 Решение

Нужно "зафиксировать" значение i, передав его как аргумент по умолчанию в lambda:


for i in range(5):
funcs.append(lambda i=i: i)


Теперь результат будет:

[0, 1, 2, 3, 4]


📌 Это один из самых частых подвохов в Python, особенно при использовании лямбда-функций в генераторах и UI-коллбеках.



tg-me.com/python_job_interview/1113
Create:
Last Update:

🐍 Хитрая задача на замыкания в Python

🔹 Уровень: Advanced
🔹 Темы: замыкания (closures), переменные цикла, lambda, отложенное выполнение

📌 Условие

Что выведет следующий код?


funcs = []

for i in range(5):
funcs.append(lambda: i)

results = [f() for f in funcs]
print(results)


Вопросы

1. Почему вывод может не соответствовать ожиданиям [0, 1, 2, 3, 4]?
2. Что именно "запоминает" lambda внутри цикла?
3. Как переписать код, чтобы результат был [0, 1, 2, 3, 4]?

🔍 Разбор

Ожидаемый (неправильный) вывод:

[4, 4, 4, 4, 4]


🔧 Почему так происходит

- Все lambda внутри funcs замыкают одну и ту же переменную `i`.
- К моменту выполнения f() переменная i уже равна 4 — и так для всех функций.

⚠️ Подвох

lambda: i не захватывает значение, а ссылается на переменную, которая будет изменяться при каждой итерации цикла.
В итоге — все lambda ссылаются на одно и то же `i`, которое стало равно 4 к концу цикла.

🧠 Решение

Нужно "зафиксировать" значение i, передав его как аргумент по умолчанию в lambda:


for i in range(5):
funcs.append(lambda i=i: i)


Теперь результат будет:

[0, 1, 2, 3, 4]


📌 Это один из самых частых подвохов в Python, особенно при использовании лямбда-функций в генераторах и UI-коллбеках.

BY Python вопросы с собеседований


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/python_job_interview/1113

View MORE
Open in Telegram


Python вопросы с собеседований Telegram | DID YOU KNOW?

Date: |

What is Secret Chats of Telegram

Secret Chats are one of the service’s additional security features; it allows messages to be sent with client-to-client encryption. This setup means that, unlike regular messages, these secret messages can only be accessed from the device’s that initiated and accepted the chat. Additionally, Telegram notes that secret chats leave no trace on the company’s services and offer a self-destruct timer.

The seemingly negative pandemic effects and resource/product shortages are encouraging and allowing organizations to innovate and change.The news of cash-rich organizations getting ready for the post-Covid growth economy is a sign of more than capital spending plans. Cash provides a cushion for risk-taking and a tool for growth.

Python вопросы с собеседований from nl


Telegram Python вопросы с собеседований
FROM USA